﻿Imports System.IO

Public Class GestionClientes
    Private _Clientes As New List(Of Cliente)
    Public ReadOnly Property Clientes As ObjectModel.ReadOnlyCollection(Of Cliente)
        Get
            Return _Clientes.AsReadOnly
        End Get
    End Property
    Public Sub New()
        If Not Directory.Exists(My.Application.Info.DirectoryPath & "\Ficheros") Then
            Directory.CreateDirectory(My.Application.Info.DirectoryPath & "\Ficheros")
        End If
        Dim fich As StreamReader
        If File.Exists(My.Application.Info.DirectoryPath & "\Ficheros\" & "Clientes.txt") Then
            Try
                fich = New StreamReader(My.Application.Info.DirectoryPath & "\Ficheros\" & "Clientes.txt")
                Do Until fich.EndOfStream
                    Dim datos() As String
                    Dim Linea As String
                    Linea = fich.ReadLine
                    datos = Linea.Split("*")
                    _Clientes.Add(New Cliente(datos(0), datos(1), datos(2), datos(3), datos(4)))
                Loop
            Catch ex As Exception
                _Clientes.Clear()
            Finally
                fich.Close()


            End Try
        Else
            Grabar()

        End If
    End Sub
    Public Function Eliminar(ByVal cliente As Cliente) As String
        If cliente.Nombre Is Nothing Then
            Return "No se puede borrar"
        End If
        For i As Integer = 0 To _Clientes.Count - 1
            If Clientes(i).Nombre.ToLower = cliente.Nombre.ToLower Then
                _Clientes.RemoveAt(i)
                Grabar()
                Return ""
            End If
        Next
        Return "Error, no existe ese cliente"
    End Function
    Public Function Añadir(ByVal cliente As Cliente) As String
        If cliente.Nombre = "Error" Then
            Return "Nombre del cliente no valido"
        End If
        If cliente.Email = "Error" Then
            Return "Email no valido"
        End If
        If cliente.NumTarjeta = "Error" Then
            Return "Numero de tarjeta no valida"
        End If
        If IsNothing(cliente.CaducidadTarjeta) Then
            Return "Tarjeta caducada"
        End If
        If cliente.CaducidadTarjeta = "Error" Then
            Return "Tarjeta caducada"
        End If
        If Clientes.Contains(cliente) Then
            Return "Ya existe el cliente " & cliente.Nombre

        End If
        _Clientes.Add(cliente)
        Grabar()
        Return ""
    End Function
    Public Function Modificar(ByVal antiguo As Cliente, ByVal nuevo As Cliente) As String
        If nuevo.Nombre = "Error" Then
            Return "Nombre del cliente no valido"
        End If
        If nuevo.Email = "Error" Then
            Return "Email no valido"
        End If
        If nuevo.NumTarjeta = "Error" Then
            Return "Numero de tarjeta no valida"
        End If
        If IsNothing(nuevo.CaducidadTarjeta) Then
            Return "Tarjeta caducada"
        End If
        If nuevo.CaducidadTarjeta = "Error" Then
            Return "Tarjeta caducada"
        End If
        For i As Integer = 0 To _Clientes.Count - 1
            If _Clientes(i).Equals(antiguo) Then
                _Clientes(i) = nuevo
                Return ""
            End If
        Next
        Return "Error"
    End Function
    Private Function Grabar() As String
        Dim fichero As StreamWriter
        Try
            File.Delete(My.Application.Info.DirectoryPath & "\Ficheros\" & "Clientes.txt")
            fichero = New StreamWriter(My.Application.Info.DirectoryPath & "\Ficheros\" & "Clientes.txt")
            For i As Integer = 0 To _Clientes.Count - 1
                fichero.WriteLine(_Clientes(i).Nombre & "*" & _Clientes(i).Password & "*" & _Clientes(i).Email & "*" & _Clientes(i).NumTarjeta & "*" & _Clientes(i).CaducidadTarjeta)
            Next
        Catch ex As Exception
            fichero.Close()
            Return ex.Message
        End Try
        fichero.Close()
        Return ""
    End Function

End Class

